iT邦幫忙

2026 iThome 鐵人賽

DAY 15
0
AI Engineering

Model with GIS系列 第 16

[Day 16] What stand for the object

  • 分享至 

  • xImage
  •  

在我們實際把 YOLOv8 的推論套進昨天寫的腳本前,我們需要來思考一個問題,那就是:「甚麼代表我們的目標物?」

YOLO 給我們的只是四個數字構成的邊框,但如果轉換至 Google Maps 是需要一個絕對位置,這兩種資料型態之間要怎麼轉換才能互相聯結呢?

地理空間的物件抽象化

在單純的 GIS 地理資訊系統中,真實的土地往往是複雜的,要在影像中表達一個目標物最需要的是繪製一個包含數百個頂點的「多邊形」,甚至是「多重多邊形」,這樣才能完美貼合我們所需的目標物的輪廓。

但我們使用的 YOLOv8 是一個電腦視覺模型,他讀一張影像的方式是「水平邊界框」,為了讓他的運算資源可以負荷,賦形把幾何輪廓強制降維成一個剛好能涵蓋物標物的長方形。

當我們要將這個長方形轉為 Google Maps 的紅色圖釘時,我們需要再做一次降維,將多邊形降維成長方形,再將長方形抽象化為單一的「點幾何」,這個點我們稱為 質心 (Centroid)。

質心的幾何

YOLO 輸出的邊界框格式是 [x_min,y_min,x_max,y_max] ,這代表了框的左上角與右下角在影像上的像素位置,要找到長方形的絕對幾何中心,就是需要找到 X 軸與 Y 軸的中點。

這個部分就變回簡單的基礎代數:
中心點 X 座標:(x_min + x_max) / 2
中心點 Y 座標:(y_min +y_max) / 2

只要取得這個中心點像素 (center_x,center_y),我們就可以把它拿去昨天寫的 rasterio 仿射變換矩陣,轉換成目標物的 GPS 經緯度。

水平邊界框的死角與誤差

這裡以機場為例,如果山為觀察一下機場的衛星圖,可以發現機場跑道幾乎都是斜的(為了配合當地的盛行風向),但 YOLO 畫出來的都是水平的的長方形,所以如果當她想要直接用一個超大的框圍住斜的長方形跑到時,這個框會包含大量的「非機場背景」。

這樣的結果會導致我們計算出中心點後並丟上 Google Maps 時,這個紅色圖釘不會准確定在跑道上,也很有可能偏移出機場本身,但好消息是目前的誤差值能夠讓人眼辨識並道行到該機場。

小結

今天我們探討了昨天寫的 geo_utils 裡面在座的一些事情的原理,明天將程式碼套用上去後就可以看到真實的推論結果以及連接 Google Maps 的效果,再之後我們就會開始大量訓練模型以及完成系統架構了,那我們明天見。


上一篇
[Day 15] Affine transformation
下一篇
[Day 17] Let model knows the angle
系列文
Model with GIS19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言